﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Turnero.DAOs;


namespace Turnero.Turnos
{
    public partial class ModificarEliminarTurno : Form
    {
        private int idTurno;
        private Turnero.Principal frmPrincipal;
        Int32 idPaciente;
        Int32 idPrestador;
        String diaTurno, minutosDesdeTurno, minutoHastaTurno;
        Int32 horaDesdeTurno, horaHastaTurno;

        public ModificarEliminarTurno()
        {
            InitializeComponent();
        }

        public ModificarEliminarTurno(int idTurno, Turnero.Principal princ)
        {
            InitializeComponent();
            this.idTurno = idTurno;
            this.frmPrincipal = princ;

            cargarCombo(cbxLocalidad);

            Turnero.Entidades.Turno turno = new Turnero.Entidades.Turno();
            DAOs.TurnosBD tbd = new DAOs.TurnosBD();
            turno = tbd.DameDatosTurnoPorId(idTurno);
            idPaciente = turno.IdPaciente;
            idPrestador = turno.IdProfesional;
            llenarCampos(turno);
            
        }

        private void llenarCampos(Entidades.Turno turno)
        {
            Turnero.Entidades.Profesional pr = new Turnero.Entidades.Profesional();
            DAOs.DAO_Profesionales dpr = new DAOs.DAO_Profesionales();
            pr = dpr.dameProfesionalPorID(turno.IdProfesional);
            
            txtProfesional.Text = pr.Ape + ", " + pr.Nom;
            txtFechaTurno.Text = turno.FechaTurno.ToShortDateString();
            txtHoraTurno.Text = turno.HoraInicio.ToString() + ":" + turno.MinutoInicio;
            cbxTipoDoc.Text = turno.TipoDoc;
            txtNroDoc.Text = turno.DniPaciente;
            txtApellidos.Text = turno.ApellidoPaciente;
            txtNombres.Text = turno.NombrePaciente;
            dtpFechaNac.Value = turno.FechaNacimiento;
            cbxSexo.Text = turno.Sexo;
            txtDomicilio.Text = turno.Domicilio;
            cbxLocalidad.SelectedValue = turno.Localidad;
            txtTelefono.Text = turno.Telefono;
            txtCelular.Text = turno.Celular;
            txtEmail.Text = turno.Mail;
            txtObraSocial.Text = turno.ObraSocial;
            txtObservaciones.Text = turno.Observaciones;

        }

        private void cargarCombo(ComboBox cmb)
        {


            if (cmb == cbxLocalidad)
            {
                DAOs.DAO_Localidades dl = new DAOs.DAO_Localidades();
                cmb.DataSource = dl.DameLocalidades();
                cmb.DisplayMember = "nombre";
                cmb.ValueMember = "idLocalidad";
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            
            if (MessageBox.Show("Está seguro que desea eliminar el turno?", "Eliminación Turno",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                    == DialogResult.Yes)
            {
                TurnosBD tbd = new TurnosBD();
                bool resultado;
                resultado = tbd.BorrarTurno(idTurno);
                if (resultado == true)
                {
                    MessageBox.Show("El turno ha sido eliminado con éxito");
                }
                else
                {
                    MessageBox.Show("El turno no pudo ser eliminado");
                }
            }
            frmPrincipal.cargarTurnos();
            frmPrincipal.setearVista();
            this.Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {

            if (MessageBox.Show("¿Desea modificar el turno?", "Confirmacion modificación", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                bool resultadoGuardarActualizar;
                bool resultadoValidacion = validarDatos();

                if (resultadoValidacion == true)
                {
                    string ape, nom, tipodoc, nrodoc, sexo, dom, tel, cel, email, cuitcuil, obs;
                    Int32 loc;
                    DateTime fechanac;

                    ape = txtApellidos.Text.ToUpper().Trim();
                    nom = txtNombres.Text.ToUpper().Trim();
                    tipodoc = cbxTipoDoc.SelectedItem.ToString().Trim();
                    nrodoc = txtNroDoc.Text.Trim();
                    fechanac = Convert.ToDateTime(dtpFechaNac.Value.Date.ToString("yyyy-MM-dd"));
                    sexo = cbxSexo.SelectedItem.ToString().Trim();
                    dom = txtDomicilio.Text.ToUpper().Trim();
                    loc = Convert.ToInt32(cbxLocalidad.SelectedValue);
                    tel = txtTelefono.Text.Trim();
                    cel = txtCelular.Text.Trim();
                    email = txtEmail.Text.Trim();


                    if (idPaciente == 0)
                    {
                        DAO_Pacientes dp = new DAO_Pacientes();
                        resultadoGuardarActualizar = dp.guardarPaciente(ape, nom, tipodoc, nrodoc, fechanac, sexo, dom, loc, tel, cel, email, "");
                        idPaciente = Convert.ToInt32(dp.dameMaxID());
                    }
                    else
                    {
                        DAO_Pacientes dp = new DAO_Pacientes();
                        resultadoGuardarActualizar = dp.actualizarPaciente(idPaciente.ToString(), ape, nom, tipodoc, nrodoc, fechanac, sexo, dom, loc, tel, cel, email, "");
                    }

                    if (resultadoGuardarActualizar == false)
                    {
                        MessageBox.Show("No se pudo actualizar los datos del paciente. No se puede continuar con el registro del turno", "Error al registrar Paciente");
                    }
                    else
                    {
                        bool resultadoActualizarTurno;
                        String obraSocial = txtObraSocial.Text.Trim();
                        String observaciones = txtObservaciones.Text.Trim();
                        DateTime diaTurnoFecha = Convert.ToDateTime(diaTurno);
                        Turnero.Entidades.Turno turno = new Turnero.Entidades.Turno(idTurno, diaTurnoFecha, horaDesdeTurno, horaHastaTurno, minutosDesdeTurno, minutoHastaTurno, nrodoc, ape, nom, tipodoc, fechanac, sexo, dom, loc, tel, cel, email, obraSocial, observaciones, idPaciente, idPrestador);
                        TurnosBD tbd = new TurnosBD();

                        resultadoActualizarTurno = tbd.actualizarTurno(turno);

                        if (resultadoActualizarTurno == true)
                        {
                            MessageBox.Show("El turno se ha registrado con éxito");
                            frmPrincipal.cargarTurnos();
                            frmPrincipal.setearVista();
                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("El turno no ha sido registrado");
                            frmPrincipal.cargarTurnos();
                            frmPrincipal.setearVista();
                            this.Close();
                        }
                    }
                }
            }
        }

        private bool validarDatos()
        {
            if (txtNroDoc.Text.Trim() == "")
            {
                MessageBox.Show("Debe Ingresar un número de dni");
                txtNroDoc.Focus();
                return false;
            }

            if (txtApellidos.Text.Trim() == "")
            {
                MessageBox.Show("Debe Ingresar un Apellido");
                txtApellidos.Focus();
                return false;
            }

            if (txtNombres.Text.Trim() == "")
            {
                MessageBox.Show("Debe Ingresar un Nombre");
                txtNombres.Focus();
                return false;
            }

            if (dtpFechaNac.Value > System.DateTime.Now)
            {
                MessageBox.Show("La fecha de Nacimiento no puede ser mayor a la fecha actual");
                dtpFechaNac.Focus();
                return false;
            }
            return true;
        }

        private void txtNroDoc_Leave(object sender, EventArgs e)
        {
            if (txtNroDoc.Text.Equals("") == false && cbxTipoDoc.SelectedIndex != (-1))
            {
                DataTable paciente = new DataTable();

                DAO_Pacientes dp = new DAO_Pacientes();

                paciente = dp.damePacientesPorTipoYNroDocExacto(cbxTipoDoc.SelectedItem.ToString(), txtNroDoc.Text);

                if (paciente.Rows.Count > 0)
                {
                    Turnero.Entidades.Paciente pac = new Turnero.Entidades.Paciente();
                    pac.Cod = paciente.Rows[0][0].ToString();
                    pac.Ape = paciente.Rows[0][3].ToString();
                    pac.Nom = paciente.Rows[0][4].ToString();
                    pac.Tipodoc = paciente.Rows[0][1].ToString();
                    pac.Nrodoc = paciente.Rows[0][2].ToString();
                    pac.Domicilio = paciente.Rows[0][7].ToString();
                    pac.Localidad = paciente.Rows[0][8].ToString();
                    pac.Sexo = paciente.Rows[0][9].ToString();
                    pac.Fechanac = paciente.Rows[0][5].ToString();
                    pac.Tel = paciente.Rows[0][10].ToString();
                    pac.Cel = paciente.Rows[0][11].ToString();
                    pac.Email = paciente.Rows[0][12].ToString();
                    pac.Obs = paciente.Rows[0][13].ToString();
                    idPaciente = Convert.ToInt32(pac.Cod);

                    txtApellidos.Text = pac.Ape;
                    txtNombres.Text = pac.Nom;

                    txtDomicilio.Text = pac.Domicilio;
                    cbxLocalidad.Text = pac.Localidad;
                    txtTelefono.Text = pac.Tel;
                    txtCelular.Text = pac.Cel;
                    txtEmail.Text = pac.Email;
                    cbxSexo.Text = pac.Sexo;
                    dtpFechaNac.Text = pac.Fechanac;

                }
                else
                {
                    idPaciente = 0;
                    limpiarCamposSinDni();
                }
            }
        }

        private void limpiarCamposSinDni()
        {
            txtApellidos.Text = "";
            txtNombres.Text = "";
            dtpFechaNac.Value = System.DateTime.Now;
            cbxSexo.SelectedIndex = 0;
            txtDomicilio.Text = "";
            cbxLocalidad.Text = "Alta Gracia";
            txtTelefono.Text = "";
            txtCelular.Text = "";
            txtEmail.Text = "";
            txtObraSocial.Text = "";
            txtObservaciones.Text = "";

        }

        private void limpiarCampos()
        {
            cbxTipoDoc.SelectedIndex = 0;
            txtNroDoc.Text = "";
            txtApellidos.Text = "";
            txtNombres.Text = "";
            dtpFechaNac.Value = System.DateTime.Now;
            cbxSexo.SelectedIndex = 0;
            txtDomicilio.Text = "";
            cbxLocalidad.Text = "Alta Gracia";
            txtTelefono.Text = "";
            txtCelular.Text = "";
            txtEmail.Text = "";
            txtObraSocial.Text = "";
            txtObservaciones.Text = "";

        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            limpiarCampos();
            cbxTipoDoc.Focus();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            limpiarCampos();
            this.Close();
        }
    }
}
